embedding my algorithm to tkinter

by: vnaa, 8 years ago


from numpy import *
import numpy as np
import matplotlib.pyplot as plt
import os
#import scipy as sp
from utils import DATA_DIR
from tkinter import *

# y = mx + b
# m is slope, b is y-intercept

##Creating the interface
root=Tk()
root.wm_title("Linear Regression")
root.geometry("450x450+500+300")


###LoadData

data = np.loadtxt(os.path.join(DATA_DIR, "data.csv"),delimiter=",")

x = data[:, 0]
y = data[:, 1]


### Defining error function f(x)
def compute_error_for_line_given_points(b, m, points):
    fx = 0
    for i in range(0, len(points)):
        x = points[i, 0]
        y = points[i, 1]
        fx += (y - (m * x + b)) ** 2 #TSSE
    return fx / float(len(points))


### Initialising the search for the best line fit(starting with any two values for m&b)
###allows the gradient descent algorithm to tries to reduce the error   function f(x)
###to find the best fit line

def step_gradient(b_current, m_current, points, learningRate):
    b_intercept = 0
    m_gradient = 0
    N = float(len(points))
    for i in range(0, len(points)):
        x = points[i, 0]
        y = points[i, 1]
        b_intercept += -(2/N) * (y - ((m_current * x) + b_current))
        m_gradient += -(2/N) * x * (y - ((m_current * x) + b_current))
    new_b = b_current - (learningRate * b_intercept)
    new_m = m_current - (learningRate * m_gradient)

    return [new_b, new_m]



def gradient_descent_runner(points, starting_b, starting_m, learning_rate, num_iterations):
    b = starting_b
    m = starting_m
    plt.ion()
    for i in range(num_iterations):
        b, m = step_gradient(b, m, array(points), learning_rate)
       # plt.set_title('Linear Regression',color='black')
        #plt.set_xlabel('This is the X axis',color='white')
        #plt.set_ylabel('This is the Y axis',color='white')
        #plt.clf()
        plt.plot(x,m*x+b,'-')
        plt.scatter(x, y, label='Points', color='k', s=20, marker='*')
        plt.pause(0.2)
        plt.draw()
       # plt.show()
    print("New values for b and m: ")
    return [b, m]




def run():
    points = data
    learning_rate = 0.00001
    initial_b = 35 #initial y-intercept guess
    initial_m = 0 # initial slope guess
    num_iterations = 50
    print ("Starting gradient descent at b = {0}, m = {1}, error = {2}".format(initial_b, initial_m, compute_error_for_line_given_points(initial_b, initial_m, points)))
    print ("Running...")
    [b, m] = gradient_descent_runner(points, initial_b, initial_m, learning_rate, num_iterations)
    print("After {0} iterations b = {1}, m = {2}, error = {3}".format(num_iterations, b, m, compute_error_for_line_given_points(b, m, points)))

lbl1 = Label(root, text="Initial intercept").grid(row=0,sticky='E')
lbl2 = Label(root, text="Initial slope").grid(row=1,sticky='E')
lbl3 = Label(root, text="learning rate").grid(row=2,sticky='E')
lbl4 = Label(root, text="num_iteration").grid(row=3,sticky='E')
txtb = Entry(root).grid(row=0, column=1)
txtm= Entry(root).grid(row=1, column=1)
txtlr= Entry(root).grid(row=2, column=1)
txtiter= Entry(root).grid(row=3, column=1)

Button_sub = Button(root,text="Start Analysis",command=run).grid(row=4, column=0, sticky=W, pady=4)
Button_exit= Button(root, text='Quit',command=quit).grid(row=5, column=0, sticky=W, pady=4)
root.mainloop()



if __name__ == '__main__':
    run()

###/show plot



You must be logged in to post. Please login or register an account.